#ifndef __PLUGIN_H_
#define __PLUGIN_H_

// Qt Includes
#include <QString>

// Qt Declarations
class QDomDocument;
class QDomElement;

// ******************************************************************
// CPlugin
// ******************************************************************
class CPlugin
{
public:
/////////////////////////////////////////////////////////////////////
// Enumerations
/////////////////////////////////////////////////////////////////////
	enum tPluginType
	{
		PLUGIN_TYPE_SCANNER,
		PLUGIN_TYPE_NONE
	};
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Static Member Functions
/////////////////////////////////////////////////////////////////////
	static tPluginType pluginTypeFromString(const QString &strPluginType);
	static QString pluginTypeToString(tPluginType ePluginType);
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Construction & Destruction
/////////////////////////////////////////////////////////////////////
	CPlugin(const QString &strPluginName,
			tPluginType ePluginType,
			const QString &strDescription);
	CPlugin();
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Member Accessors
/////////////////////////////////////////////////////////////////////
	void setPluginName(const QString &strPluginName) { m_strName = strPluginName; }
	const QString& getPluginName() const { return m_strName; }

	void setPluginType(tPluginType ePluginType) { m_ePluginType = ePluginType; }
	tPluginType getPluginType() const { return m_ePluginType; }

	void setDescription(const QString &strDescription) { m_strDescription = strDescription; }
	const QString& getDescription() const { return m_strDescription; }
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Member Functions
/////////////////////////////////////////////////////////////////////
	bool loadFromXml(const QDomElement &xmlElement);
	QDomElement saveToXml(QDomDocument &xmlDocument,
			bool bConfigOnly = false) const;
/////////////////////////////////////////////////////////////////////

private:
/////////////////////////////////////////////////////////////////////
// Member Variables
/////////////////////////////////////////////////////////////////////
	QString m_strName;
	tPluginType m_ePluginType;
	QString m_strDescription;
/////////////////////////////////////////////////////////////////////
};

#endif // #ifndef __PLUGIN_H_
